package cc.linker.steplink.crm.merchanth5.service.acs;

import cc.linker.steplink.crm.merchanth5.pojo.acs.*;
import cc.linker.steplink.crm.response.GlobalException;

import java.util.*;

public interface PurchaseProcessNewService {

    /**
     * 获取签名
     * <p>
     * feeList（原来的totalFee包括分享人distributor，订单idorderId,是否分享 type,）
     */
    Map getSign2(Map<String, Object> param, String paySn, Integer payMode, List feeList, boolean rePay, String orgId, Integer score, String customerId, List<Long> orderIds, String distributor);

    Map getSign(Map<String, Object> param, String paySn, Integer payMode, List feeList, boolean rePay, String orgId, Integer score, String customerId, List<Long> orderIds, String distributor);

    /**
     * 购买商品回调
     *
     * @param param
     * @throws GlobalException
     */
    void shopCallback(Map<String, Object> param) throws GlobalException;

    /**
     * 插入单商品明细表
     */
    void insertGoodsProtectTradeInfo(String goodsInfo, String pid, String orgId, Integer payMode, String unFreezeTime, String customerId, String wxtransactionId);

    /**
     * 生成业务单号
     * 前缀+13位时间戳+用户id//异步执行文章操作
     */
    String generateBusiSn(Integer tradeType, String customerId);

    void buyGoodsSmsPush(List<Map<String, Object>> goodsIdAndBuyNum, String orgId);

    void setTemplateMessageList(Map data);

    void getGoodsTrades(boolean isSale, String customerId, List<Map<String, Object>> goodsTradeInfos, boolean ifRebateToOrg, String belongId, String orgId, String mallsOrgId, String orderSn, Long recId, Integer goodsTotalPrice, Integer processFee, Integer profitFee, String mallsBelongId, Integer spreadFee, String orderName, Integer incomeScore, Integer spreadFeeScore);

    /**
     * trade插入记录
     *
     * @param from        支付用户
     * @param orderSn     订单号
     * @param recId       订单商品主键
     * @param to          收款用户
     * @param amount      金额（分）
     * @param expendType  支出类型
     * @param tradeType   交易类型
     * @param payType     支付方式
     * @param receiveRole 收款人角色
     * @return
     */
    Map<String, Object> setTradeInfo(String from, String orderSn, Long recId, String to, Integer amount, Integer expendType, Integer tradeType, Integer payType, Integer receiveRole, Integer payRole, String accountType, String orderName, Boolean isKnowledge, Integer incomeScore);

    /**
     * 合并订单
     */
    List<Map<String, Object>> removeList(List<Map<String, Object>> tradeInfos);

    /**
     * 获取微信签名
     *
     * @param openid
     * @param paySn
     * @param totalPay
     * @param orgId
     * @return
     */
    String getResultWx(String openid, String paySn, int totalPay, String orgId, String payType);

    /**
     * 获取通联签名
     *
     * @param :            tlResultList 商品列表参数
     * @param ：orgId       机构id
     * @param ：paySn       合单订单号
     * @param ：allTotalPay 总金额
     * @param ：customerId  用户id
     * @param ：payType     支付类型 h5 小程序
     * @param ：payMode     支付模式 微信 通联 云听荟通联
     * @param ：score       总金币
     * @param ：frontUrl    支付后跳转地址
     * @param paySn
     * @param allTotalPay
     * @return
     */
    String tlResult(List<TlResultPo> tlResultList, String orgId, int allTotalPay, String paySn, String customerId, String openid, String payType, Integer payMode, Integer score, String frontUrl);

    /**
     * 获取需要插入的trade数据
     *
     * @param ifFw            是否产出服务费给分享人
     * @param distributor     分享人id
     * @param :score          抵扣积分（金币）
     * @param customerId      购买人id
     * @param ifRebateToOrg   是否为大b需要反润的商品
     * @param orgId           机构id
     * @param belongId        商品所属人id
     * @param ifRf            是否产出推荐费给推荐人
     * @param :sharePrice     返利值(服务费)1
     * @param :recomPrice     返利值(推荐费)2
     * @param pid             上级id
     * @param unhappen        未产生费用给谁 1-商家2-机构
     * @param :income         商品收益=订单总金额-总返利-平台费4
     * @param :unionBarleyFee 大麦抽成
     * @param :platformPrice  返利值(平台费)3
     * @param :linkerFee      联汇抽成
     * @param linkId          联汇id
     * @param ifCz            是否有创作费
     * @param author          创作人
     * @param :originalPrice  创作费
     */
    Map getTradeInfo(TradeParamPo po, boolean ifFw, String distributor, String distributorFw, String customerId, boolean ifRebateToOrg, String mallsOrgId, String belongId, boolean ifRf, String pid, Integer unhappen, String linkId, String orderSn, Long recId, boolean distributorIsNormal, boolean ifCz, String author, String orgId);

    TradeParamPo getEndTrade(TradeParamPo po);

    /**
     * 生成微信支付调用参数
     */
    Map<String, Object> getWxPayParam(String openId, String orderSn, String totalFee, String orgId, String payType);

    /**
     * 调用结果处理(中金)
     */
    String callResultProcess(String result) throws GlobalException;

    /**
     * 调用结果处理(微信)
     */
    String callResultProcessWx(String result) throws GlobalException;

    /**
     * 根据用户id判断是否为普通用户(需要分金币的用户)
     */
    boolean getUserRole(String customerId);

    /**
     * 根据机构和费用类型查询分账配置账号id
     *
     * @param type  见FeeConstants
     * @param orgId 机构id
     */
    String getCustomerIdByFeeTypeAndOrdId(String type, String orgId, Integer payMode) throws GlobalException;

    /**
     * 根据费用类型，获得账户类型ABC
     *
     * @param type
     * @param orgId
     * @return
     */
    String getAccountTypeByFeeTypeAndOrgId(String type, String orgId);

    /**
     * 生成account数据
     *
     * @param name
     * @param amount
     * @param orgId
     * @return
     * @throws GlobalException
     */
    AccountInfo getAccountMap(String name, Integer amount, String orgId, Integer payMode) throws GlobalException;

    List copyList(List a);

    //增加销量
    void addSaleNum(Map<String, Object> param);
}
